// !需求：一个函数，传递什么类型，返回的就是什么类型
// 只满足了一种情况
/* function temp(n: number): number {
  return 8
} */

/* function temp(n: any): any {
  return n + '8'
}
temp(8) */

/* function temp<T>(n: T): T {
  return n
}
let num = 8
// let r1 = temp<number>(num)
let r1 = temp(num)
let r2 = temp<string>('abc') */

/* function temp<T>(n: T[]): number {
  return n.length
}
temp<number>([8, 9]) */

function temp<T>(n: T[] | number): number {
  // 报错了，因为联合类型 n 可能没有 length，不能直接用
  // return n.length
  if(Array.isArray(n)) {
    return n.length
  }
  return n
}

temp<string>(['a', 'b'])
temp(8)

export { }